/**
 * @api {post} /api/sys/login 登录接口
 * @apiName EmployeeLogin
 * @apiGroup 登录
 * @apiDescription 通过手机号和密码登录系统，成功后返回JWT令牌
 * 
 * @apiHeader {String} Content-Type 必须为 application/json
 * 
 * @apiParam {String} mobile 手机号 登录账号
 * @apiParam {String} password 密码 登录密码
 * 
 * @apiSuccess {Number} code 状态码 10000表示成功
 * @apiSuccess {String} data 返回的JWT令牌 用于后续请求的身份验证
 * @apiSuccess {String} message 提示信息 操作结果描述
 * @apiSuccess {Boolean} success 是否成功 true表示成功
 * 
 * @apiError {Number} code 状态码 20001表示失败
 * @apiError {String} message 错误信息 失败原因描述
 * @apiError {Boolean} success 是否成功 false表示失败
 * 
 * @apiErrorExample {json} 错误响应-请求头错误:
 *     HTTP/1.1 400 Bad Request
 *     {
 *       "code": 错误状态码,
 *       "message": "请求头必须包含 Content-Type: application/json",
 *       "success": false
 *     }
 * 
 * @apiErrorExample {json} 错误响应-登录失败:
 *     HTTP/1.1 401 Unauthorized
 *     {
 *       "code": 20001,
 *       "message": "手机号或密码错误",
 *       "success": false
 *     }
 */
import Router from '@koa/router';
import { generateToken } from '../../utils/token.js';
import { encryptPassword, verifyPassword } from '../../utils/password.js';
import { query, safeQuery, SQL_OPERATION_TYPES } from '../../utils/db-helper.js';

const employeesRouter = new Router();

employeesRouter.post('/sys/login', async (ctx) => {
  // 验证请求头是否包含正确的 Content-Type
  const contentType = ctx.request.headers['content-type'];
  if (!contentType || !contentType.includes('application/json')) {
    return ctx.cc('请求头必须包含 Content-Type: application/json');
  }

  // 解构请求体中的手机号和密码
  const { mobile, password } = ctx.request.body;

  // SQL查询语句，根据手机号查询用户信息
  const sql = 'SELECT * FROM sys_user WHERE mobile = ?';

  // 执行安全的SQL查询操作
  const res = await safeQuery(SQL_OPERATION_TYPES.SELECT, sql, [mobile]);

  // 验证密码是否匹配
  const isMatch = await verifyPassword(password, res[0].password);

  // 判断用户是否存在以及密码是否正确
  if (res.length === 0 || !isMatch) return ctx.cc('手机号或密码错误');

  // 登录成功，生成token并返回响应
  ctx.body = {
    code: 10000,
    data: generateToken({ mobile }), // 使用手机号生成JWT令牌
    message: '登录成功',
    success: true
  };
});

export default employeesRouter;
